package controlador;

import classes.Produto;
import dao.DaoProduto;
import dao.IDaoProduto;
import erro.ConexaoException;
import erro.ConsultaException;
import erro.DaoException;
import erro.GeralException;
import java.util.ArrayList;

/**
 *
 * @author George
 */
public class ControladorProduto {

    Produto prod = new Produto();
    private IDaoProduto daoProd = new DaoProduto();

    public ControladorProduto() {

        this.daoProd = new DaoProduto();
    }

    /**
     * Validação antes de inserir um novo produto no banco
     * @param prod
     * @throws GeralException 
     */
    public void validar(Produto prod) throws GeralException {
        if (prod.getDescProduto().trim().equals("")) {
            throw new GeralException("Informe a Descrição do Produto!");
        }
    }

    /**
     * Tenta inserir o produto no banco
     * @param prod
     * @throws GeralException 
     */
    public void inserir(Produto prod) throws GeralException {

        try {
            this.daoProd.inserir(prod);
        } catch (ConexaoException ex) {
            throw new GeralException("Nao foi possivel conectar-se ao banco de dados. Informe ao Administrador!");
        } catch (DaoException e) {
            throw new GeralException("Não foi possivel inserir o Produto! Informe ao Administrador!");
        }
    }

    /**
     * Tenta alterar um produto no banco
     * @param prod
     * @throws GeralException 
     */
    public void alterar(Produto prod) throws GeralException {
        try {
            this.daoProd.alterar(prod);
        } catch (ConexaoException ex) {
            throw new GeralException("Nao foi possivel conectar-se ao banco de dados. Informe ao Administrador!");
        } catch (DaoException ex) {
            throw new GeralException("Não foi possivel alterar o Usuário! Informe ao Administrador!");
        }
    }

    /**
     * Tenta excluir um produto do banco
     * @param prod
     * @throws ConexaoException
     * @throws ConsultaException
     * @throws GeralException 
     */
    public void deletar(Produto prod) throws ConexaoException, ConsultaException, GeralException {
        try {
            this.daoProd.deletar(prod);
        } catch (ConexaoException ex) {
            throw new GeralException("Nao foi possivel conectar-se ao banco de dados. Informe ao Administrador!");
        } catch (DaoException ex) {
            throw new GeralException("Não foi possivel alterar o Usuário! Informe ao Administrador!");
        }
    }

    /**
     * Tenta fazer uma pesquisa de produto no banco
     * Se nao encontrar exibe uma mensagem
     * @param prod
     * @return
     * @throws GeralException
     * @throws DaoException 
     */
    public Produto pesquisarProduto(Produto prod) throws GeralException, DaoException {
        try {
            this.daoProd.pesquisar(prod);
            if (prod.getCodProduto() == null) {
                throw new DaoException("Produto não Encontrado!");
            }
        } catch (ConexaoException e) {
            throw new GeralException("Nao foi possivel conectar-se ao banco de dados.");
        }
        return (prod);
    }
 /**
     * Tenta fazer uma pesquisa de produto no banco
     * Se nao encontrar exibe uma mensagem
     * @param prod
     * @return
     * @throws ConexaoException
     * @throws ConsultaException 
     */
     public ArrayList<Produto> pesquisarProdutoProd(Produto prod) throws ConexaoException, ConsultaException {
        return (ArrayList<Produto>) this.daoProd.pesquisarProd(prod);
    }
    
    /**
     * Tenta listar os produtos
     * @param prod
     * @return
     * @throws ConexaoException
     * @throws ConsultaException 
     */
    public ArrayList<Produto> listar(Produto prod) throws ConexaoException, ConsultaException {
        return (ArrayList<Produto>) this.daoProd.listar();
    }
}
